Computing systems typically employ data storage systems for storage and retrieval of data accessed by users. Various types of storage devices can be employed in these data storage systems, such as hard disk drives (HDDs) or solid-state drives (SSDs), among others. SSDs employ various underlying storage technology, such as NAND flash arrays. Payload data stored in these arrays is typically encoded using various error correction codes to ensure more reliable data storage despite random read/write errors, interfacing errors, and physical flaws in the underlying storage media. However, these error correction codes consume finite computing resources and take time to converge to corrected data values during data read decoding.
Media and latency limitations of certain computer/server types or data access styles might preclude encoding data with large error correction overheads, due in part to latency involved in decoding processes. For example, many users who use Internet services access content storage in specific ways, where content is initially written and then that same content is read many times when different clients need to consume the same content. Such applications can include sharing of popular songs or videos on content websites that are read many thousands of times in close temporal proximity to one another. Moreover, content media servers and systems many times forgo large random-access memory (RAM) caches in lieu of large data storage devices due in part to cost.
Overview
Enhanced error correction for data stored in storage devices are presented herein. A storage controller retrieves an initial encoded data segment stored on a storage media, computes an indication of error locations resultant from decoding the initial encoded data segment, and stores the indication of the error locations in a cache. The storage controller retrieves subsequent encoded data segments stored on the storage media, augments a decoder using at least the indication of the error locations retrieved from the cache, and decodes the subsequent encoded data with the decoder to produce resultant data.
In another example, a storage controller retrieves an initial encoded data segment stored on a storage media, computes an indication of error rate and compares it to a threshold. When the error rate exceeds the threshold, the storage controller generates a secondary set of parity bits for the data segment and stores the extra parity bits in a cache or in the storage media to be used in consecutive reads of the data segment.